package org.mch.func.sys.func;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.mch.func.entity.MFuncEO;
import org.mch.main.MDao;

public class SysFuncTreeModel {

	private List<MFuncEO> listFuncTree;
	private DefaultTreeModel treeModel;

	public SysFuncTreeModel() {
		super();
		try {
			init();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	protected void init() throws Exception {
		queryFuncTreeData();
		// listFuncTree = buildMFuncEOList();

		buildTreeModel();
	}

	// private List<MFuncEO> buildMFuncEOList() {
	// List<MFuncEO> tl = new ArrayList<>();
	// tl.add(new MFuncEO("001", "00", "初始化环境", "00"));
	// tl.add(new MFuncEO("002", "0001", "数据库连接", "0001",
	// "org.mch.func.db.conn.ConnDBPanel"));
	//
	// tl.add(new MFuncEO("003", "05", "数据库工具", "05"));
	// tl.add(new MFuncEO("004", "0501", "数据库操作", "0501",
	// "org.mch.func.db.tool.DBToolPanel"));
	// tl.add(new MFuncEO("005", "0502", "数据库表操作", "0502",
	// "org.mch.func.db.field.DBFieldPanel"));
	// tl.add(new MFuncEO("006", "0503", "PDM文件解析", "0503",
	// "org.mch.func.db.pdmfile.PDMPanel"));
	//
	// tl.add(new MFuncEO("007", "10", "File工具集", "10"));
	// tl.add(new MFuncEO("008", "1001", "读取工具", "1001",
	// "org.mch.func.file.common.ClientPanel"));
	// tl.add(new MFuncEO("009", "1002", "文件比较", "1002",
	// "org.mch.func.file.bijiao.ClientPanel"));
	// tl.add(new MFuncEO("010", "1003", "文件名操作", "1003",
	// "org.mch.func.file.filename.ClientPanel"));
	// tl.add(new MFuncEO("011", "1004", "文件查找复制", "1004",
	// "org.mch.func.file.findcopy.ClientPanel"));
	//
	// tl.add(new MFuncEO("0071", "11", "字符工具集", "11"));
	// tl.add(new MFuncEO("0072", "1101", "字符串截取", "1101",
	// "org.mch.func.strings.cut.ClientPanel"));
	//
	// tl.add(new MFuncEO("011", "15", "文本编码", "15"));
	// tl.add(new MFuncEO("012", "1501", "编码工具", "1501",
	// "org.mch.func.encode.EncodePanel"));
	//
	// tl.add(new MFuncEO("013", "20", "平台管理", "20"));
	// tl.add(new MFuncEO("014", "2001", "项目Excel管理", "2001", ""));
	// tl.add(new MFuncEO("015", "2002", "项目Data管理", "2002", ""));
	//
	// tl.add(new MFuncEO("016", "25", "WebService", "25"));
	// tl.add(new MFuncEO("017", "2501", "TestWebService", "2501",
	// "com.mch.func.testwebservice.ClientPanel"));
	//
	// tl.add(new MFuncEO("018", "30", "MCH-CG管理", "30"));
	// tl.add(new MFuncEO("019", "3001", "JSF2-Primefaces页面生成", "3001",
	// "com.mch.func.jsf2primefaces.JSF2PFPanel"));
	// tl.add(new MFuncEO("020", "3002", "TestWebService", "3002",
	// "com.mch.func.testwebservice.ClientPanel"));
	// tl.add(new MFuncEO("021", "3003", "TestWebService", "3003",
	// "com.mch.func.testwebservice.ClientPanel"));
	//
	// tl.add(new MFuncEO("022", "35", "PHP", "35"));
	// tl.add(new MFuncEO("023", "3501", "语言文件替换", "3501",
	// "com.mch.func.php.filerep.ClientPanel"));
	//
	// tl.add(new MFuncEO("024", "40", "YLSL", "40"));
	// tl.add(new MFuncEO("025", "4001", "排序演练", "4001",
	// "org.mch.func.lcsx.sorteg.SortPanel"));
	//
	// tl.add(new MFuncEO("026", "45", "网页工具集", "45"));
	// tl.add(new MFuncEO("027", "4501", "图片裁剪", "4501",
	// "org.mch.func.img.cut.ClientPanel"));
	// tl.add(new MFuncEO("028", "4502", "网页抓取", "4502",
	// "org.mch.func.webpage.zhuaqu.ClientPanel"));
	// tl.add(new MFuncEO("029", "4503", "DedeCMS", "4503",
	// "org.mch.func.webpage.dedecms.ClientPanel"));
	// tl.add(new MFuncEO("030", "4504", "Browser", "4504",
	// "org.mch.func.webpage.zhuaqu.browser.ClientPanelBrowser"));
	// tl.add(new MFuncEO("031", "4505", "构建内容", "4505",
	// "org.mch.func.webpage.buildcontent.ClientPanel"));
	//
	// return tl;
	// }

	protected void buildTreeModel() {
		MFuncEO rootEO = new MFuncEO("", "菜单列表");
		DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootEO);

		Map<String, DefaultMutableTreeNode> map = new HashMap<String, DefaultMutableTreeNode>();
		map.put(rootEO.getNodecode(), root);

		for (int i = 0, len = getListFuncTree().size(); i < len; i++) {
			MFuncEO eo = getListFuncTree().get(i);
			String upcode = eo.getNodecode().substring(0, eo.getNodecode().length() - 2);
			DefaultMutableTreeNode node = new DefaultMutableTreeNode(eo);

			map.get(upcode).add(node);

			map.put(eo.getNodecode(), node);
		}

		this.treeModel = new DefaultTreeModel(root);
	}

	protected void queryFuncTreeData() throws Exception {
		MDao dao = new MDao();
		String sql = "select * from m_func order by ordercode";
		this.listFuncTree = dao.query(sql, new BeanListHandler<MFuncEO>(MFuncEO.class));
	}

	public DefaultTreeModel getTreeModel() {
		return treeModel;
	}

	public List<MFuncEO> getListFuncTree() {
		return listFuncTree;
	}
}
